package document_request

import (
	"os"
	"private-go-sdk/http"
	"private-go-sdk/model/common"
	"encoding/json"
)

type DocumentUploadofflinedocumentRequest struct {
	// <ext>core:true</ext> 【线下签署文档】线下签署文档 【传参】 1、支持的文件格式：doc，docx，xls，xlsx，txt，pdf，rtf，jpg，png，gif，tiff，jpeg，zip，rar。 2、上传签署文档大小限制可在【电子签章管理后台-电子用印设置-文件上传限制】进行配置。
	OfflineDocument *os.File `json:"offlineDocument"`
	// <ext>inner-type:Json<UploadofflinedocumentInfo>;core:true</ext> 【线下签署文档信息】线下签署文档信息
	DocumentInfo string `json:"documentInfo"`
	// <ext>inner-type:Json<ContractRequest>;core:true</ext> 【电子签约文件】电子签约文件 【作用】 查询需添加线下签署文档的电子签约文件 【传参】 电子签约文件id和第三方业务系统文件id必传其一，均传入以电子签约文件id为准。
	ContractRequest string `json:"contractRequest"`
	// <ext>inner-type:Json<NameUserInfoRequest>;core:true</ext> 【操作人】操作人 【作用】 可传入业务系统中进行添加附件的操作人，传入后将在电子签章前台的签署详情、审计中进行记录，方便后期追溯 【传参】 1、参数必传其一（除姓名外），传入多个参数时根据verificationRule（查询规则）判断。 2、若用户不存在或操作人未传时，日志将记录调用此接口的应用名称。
	UserRequest string `json:"userRequest,omitempty"`
	ContractRequestObject *common.ContractRequest `json:"contractRequestObject,omitempty"`
	DocumentInfoObject *common.UploadofflinedocumentInfo `json:"documentInfoObject,omitempty"`
	UserRequestObject *common.NameUserInfoRequest `json:"userRequestObject,omitempty"`
}
func (obj DocumentUploadofflinedocumentRequest) GetUrl() string {
    return "/document/uploadofflinedocument"
}

func (obj DocumentUploadofflinedocumentRequest) GetHttpParameter() *http.HttpParameter {
    parameter := http.NewPostHttpParameter()
    parameter.AddFiles("offlineDocument", obj.OfflineDocument)
    if obj.DocumentInfoObject != nil {
       jsonBytes, _ := json.Marshal(obj.DocumentInfoObject)
       parameter.AddParam("documentInfo", string(jsonBytes))
   } else {
       parameter.AddParam("documentInfo", obj.DocumentInfo)
   }
    if obj.UserRequestObject != nil {
       jsonBytes, _ := json.Marshal(obj.UserRequestObject)
       parameter.AddParam("userRequest", string(jsonBytes))
   } else {
       parameter.AddParam("userRequest", obj.UserRequest)
   }
    if obj.ContractRequestObject != nil {
       jsonBytes, _ := json.Marshal(obj.ContractRequestObject)
       parameter.AddParam("contractRequest", string(jsonBytes))
   } else {
       parameter.AddParam("contractRequest", obj.ContractRequest)
   }
    return parameter
}
